///*******************************************************************************
// * Includes
// ******************************************************************************/
//#include "Wed_mii.h"
//
///*******************************************************************************
// * Static
// ******************************************************************************/
//static struct Wed_list_head __g_mii_list;
//static struct Wed_mutex     __g_mii_list_lock;
//
///*******************************************************************************
// * Code
// ******************************************************************************/
///**
// * \brief MII 设备链表初始化
// *
// * @return 成功返回 0
// */
//int Wed_mii_list_init(void){
//    Wed_list_head_init(&__g_mii_list);
//
//    return Wed_mutex_init(&__g_mii_list_lock);
//}
//
///**
// * \brief 设备添加函数
// */
//static int __dev_add(struct Wed_mii *p_mii_dev){
//    int ret = 0;
//
//    ret = Wed_mutex_lock(&__g_mii_list_lock, 5000);
//    if (ret != 0) {
//        return ret;
//    }
//
//    Wed_list_node_add_tail(&p_mii_dev->node, &__g_mii_list);
//
//    Wed_mutex_unlock(&__g_mii_list_lock);
//
//    return ret;
//}
//
///**
// * \brief MII 设备写函数
// */
//static int __dev_init(void *p_dev){
//    struct Wed_mii *p_mii_dev = (struct Wed_mii *)p_dev;
//
//    if (p_mii_dev->p_opts->p_fn_init) {
//        return p_mii_dev->p_opts->p_fn_init(p_mii_dev->p_opts_arg);
//    }
//
//    return 0;
//}
//
///**
// * \brief MII 注册
// *        MII（Media Independent Interface）即介质无关接口，是 IEEE 802.3 标准
// *        中定义的一种以太网通信接口。它的核心目的是将 MAC（介质访问控制）子层与 PHY（物理层）芯片分开，
// *        使同一个 MAC 层可以适配不同的 PHY 层（例如支持100Base-TX双绞线、100Base-FX光纤等），
// *        从而增加了设计的灵活性。
// *
// * @param p_name     接口名字
// * @param p_opts     操作函数集
// * @param p_opts_arg 操作函数参数
// *
// * @return 成功返回 0
// */
//int Wed_mii_register(char                *p_name,
//                     struct Wed_mii_opts *p_opts,
//                     void                *p_opts_arg){
//    int             ret;
//    struct Wed_mii *p_mii_dev = NULL;
//
//    if ((p_name == NULL) || (strlen(p_name) >= WED_MII_NAME_LEN) || (p_opts == NULL)) {
//        return -WED_EINVAL;
//    }
//
//    /* 检查设备是否已存在 */
//    if (Wed_dev_find_by_name(p_name)) {
//        return -WED_EEXIST;
//    }
//
//#if WED_MEM_DYMANICS
//    p_mii_dev = Wed_calloc(1, sizeof(struct Wed_mii));
//    if (p_mii_dev == NULL) {
//        return -WED_ENOMEM;
//    }
//
//    p_mii_dev->p_opts     = p_opts;
//    p_mii_dev->p_opts_arg = p_opts_arg;
//
//    ret = Wed_mutex_init(&p_mii_dev->lock);
//    if (ret != 0) {
//        goto __failed;
//    }
//
//    ret = Wed_dev_init_add(&p_mii_dev->dev,
//                            p_name,
//                            WED_DEV_TYPE_MII,
//                            NULL,
//                            NULL);
//    if (ret == 0) {
//        __dev_add(p_mii_dev);
//
//        return 0;
//    }
//
//__failed:
//    Wed_free(p_mii_dev);
//
//    return ret;
//#endif
//}
//
///**
// * \brief 初始化所有 MII 设备
// *
// * @return 成功返回 0
// */
//int Wed_mii_init_all(void){
//    int                   ret    = WED_NO_DEV;
//    int                   ret_mutex;
//    struct Wed_list_node *p_node = NULL;
//    struct Wed_mii       *p_dev  = NULL;
//
//    ret_mutex = Wed_mutex_lock(&__g_mii_list_lock, 5000);
//    if (ret_mutex != 0) {
//        return ret_mutex;
//    }
//
//    Wed_list_for_each_node(p_node, &__g_mii_list){
//        p_dev = WED_CONTAINER_OF(p_node, struct Wed_mii, node);
//
//        ret = __dev_init(p_dev);
//        if (ret != 0) {
//            WED_WARN_PRINT("mii \"%s\" init failed(%d)", p_dev->dev.name);
//        }
//    }
//
//    Wed_mutex_unlock(&__g_mii_list_lock);
//
//    return ret;
//}
//
///**
// * \brief 根据名字获取 MII 设备结构体
// *
// * @param p_mii_name MII 名字
// *
// * @return 找到返回 MII 设备结构体，没找到返回 NULL
// */
//struct Wed_mii *Wed_mii_find_by_name(char *p_mii_name){
//    int                   ret;
//    struct Wed_list_node *p_node = NULL;
//    struct Wed_mii       *p_dev  = NULL;
//
//    ret = Wed_mutex_lock(&__g_mii_list_lock, 5000);
//    if (ret != 0) {
//        return NULL;
//    }
//
//    Wed_list_for_each_node(p_node, &__g_mii_list){
//        p_dev = WED_CONTAINER_OF(p_node, struct Wed_mii, node);
//        if (strcmp(p_dev->dev.name, p_mii_name) == 0) {
//            Wed_mutex_unlock(&__g_mii_list_lock);
//
//            return p_dev;
//        }
//    }
//
//    Wed_mutex_unlock(&__g_mii_list_lock);
//
//    return NULL;
//}
//
//
